package net.jcip.examples.chapter7;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 可以对 TimedRun 代码进行一些改进，以解决上述问题：
 *
 * 管理资源的生命周期：
 *
 * 确保 ExecutorService 能够被适当地关闭，以避免资源泄露。
 * 改进任务的中断处理：
 *
 * 确保提交的任务能够正确响应中断信号。
 * 异常处理的透明性：
 *
 * 改进异常处理机制，确保异常信息不被隐藏。
 * 增强测试性：
 *
 * 通过依赖注入的方式，使代码更容易被测试。
 */
public class Main {


    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        TimedRunFix timedRun = new TimedRunFix(executorService);

        try {
            timedRun.timedRun(() -> {
                // 任务代码
                while (!Thread.currentThread().isInterrupted()) {
                    // 模拟长时间运行的任务
                    try {
                        Thread.sleep(10000);
                        System.out.println("task finished");
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }, 1, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            // 处理中断异常
        } finally {
            timedRun.shutdown();
        }
    }


}
